/**
 * 
 */
package co.com.unmasters.pokerbot.core;

import java.util.ArrayList;

import co.com.unmasters.pokerbot.util.Logger;

/**
 * Clase encargada de los jugadores y de la baraja
 * 
 * @author nanana
 */
public class Mesa {

    /** C�digo �nico para la mesa */
    int id;

    /** Valor acumulado de dinero en la mesa */
    int pozo;
    
    /** Cartas compartidas en la mesa */
    private ArrayList<Carta> cartas;
    enum EstadoMesa {preflop,postFlop,turn,river};
    private ArrayList<Carta> cartasComunes;
    public static final int PREFLOP = 0;
    public static final int POSTFLOP = 1;
    public static final int TURN = 2;
    public static final int RIVER = 3;
    private int estadoMesa = PREFLOP;
    private int apuesta;
    public int getApuesta() {
		return apuesta;
	}

	public void setApuesta(int apuesta) {
		this.apuesta = apuesta;
	}

	public int getEstadoMesa() {
		return estadoMesa;
	}

	public void setEstadoMesa(int estadoMesa) {
		this.estadoMesa = estadoMesa;
	}
	/** Jugadores compartidas en la mesa */
    private ArrayList<Jugador> jugadores;

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the pozo
     */
    public int getPozo() {
        return pozo;
    }

    /**
     * @param pozo
     *            the pozo to set
     */
    public void setPozo(int pozo) {
        this.pozo = pozo;
    }

    /**
     * @return the cartas
     */
    public ArrayList<Carta> getCartas() {
        return cartas;
    }

    /**
     * @param cartas
     *            the cartas to set
     */
    public void setCartas(ArrayList<Carta> cartas) {
        this.cartas = cartas;
    }

    /**
     * @return the jugadores
     */
    public ArrayList<Jugador> getJugadores() {
        if (this.jugadores==null){
            this.jugadores = new ArrayList<Jugador>();
        }
        
        return this.jugadores;
    }

    /**
     * @param jugadores
     *            the jugadores to set
     */
    public void setJugadores(ArrayList<Jugador> jugadores) {
        this.jugadores = jugadores;
    }

    /**
     * @return the cartasComunes
     */
    public ArrayList<Carta> getCartasComunes() {
        return cartasComunes;
    }

    /**
     * @param cartasComunes
     *            the cartasComunes to set
     */
    public void setCartasComunes(ArrayList<Carta> cartasComunes) {
        this.cartasComunes = cartasComunes;
    }

    /**
     * funci�n que inicializa la mesa de acuerdo al n�mero de Jugadores y al
     * monto establecido
     * 
     * @param numerojugadores
     *            N�mero de Jugadores
     * @param dinero
     *            Monto
     */
    public void iniciarmesa(int numerojugadores, int dinero) {
        Logger.println(Mesa.class, "#INICIAR MESA", Logger.NIVEL_LOG_ESTADO);
        this.estadoMesa  = PREFLOP;
        int dineroPorjugador = dinero / numerojugadores;

        for (int i = 0; i < numerojugadores; i++) {
            Jugador jugador = new Jugador();
            jugador.setDinero(dineroPorjugador);
            jugador.setId(i);
            getJugadores().add(jugador);
        }
        
        //Inicializaci�n de la baraja
        this.cartas = Baraja.crearBaraja();
        this.cartas = Baraja.barajar(getCartas());
        
        this.cartasComunes = Dealer.repartirCartasComunes(getCartas(),estadoMesa);
        Dealer.repartirCartasJugadores(getCartas(), getJugadores());
    } 
    public void nuevaRonda() {
        Logger.println(Mesa.class, "#NUEVA RONDA", Logger.NIVEL_LOG_ESTADO);
        //Inicializaci�n de la baraja
        this.estadoMesa = PREFLOP;
        this.cartasComunes = new ArrayList();
        this.cartas = Baraja.crearBaraja();
        this.cartas = Baraja.barajar(getCartas());
        
        Dealer.repartirCartasJugadores(getCartas(), getJugadores());
    }
}